Governor Limit Optimization Techniques Apex কোড লেখার সময় Governor Limits মেনে চলার জন্য কিছু গুরুত্বপূর্ণ পদ্ধতি ও স্ট্র্যাটেজি, যা Salesforce প্ল্যাটফর্মের স্থায়িত্ব ও পারফরম্যান্স উন্নত করতে সাহায্য করে। Salesforce-এর মাল্টি-টেন্যান্ট আর্কিটেকচারে একাধিক ব্যবহারকারী একত্রে কাজ করার কারণে Governor Limits মেনে চলা অত্যন্ত গুরুত্বপূর্ণ।
Bulkify করার মাধ্যমে একাধিক রেকর্ডে একত্রে SOQL বা DML অপারেশন চালানো যায়। এটি SOQL বা DML অপারেশনের সংখ্যা কমিয়ে Governor Limits বজায় রাখতে সহায়ক।
public void updateAccounts(List<Account> accounts) {
List<Account> accountsToUpdate = new List<Account>();
for (Account acc : accounts) {
if (acc.Industry == 'Technology') {
acc.Rating = 'Hot';
accountsToUpdate.add(acc);
}
}
// Bulk DML Operation
if (!accountsToUpdate.isEmpty()) {
update accountsToUpdate;
}
}
Account
রেকর্ডকে একত্রে update
অপারেশন চালিয়ে Governor Limits বজায় রাখা হয়েছে।SOQL কুয়েরিতে শুধুমাত্র প্রয়োজনীয় ফিল্ডগুলো কুয়েরি করুন এবং কুয়েরিতে WHERE ক্লজ ব্যবহার করে রেকর্ড ফিল্টার করুন। এতে SOQL কুয়েরির সংখ্যা কমানো যায় এবং ডেটা ফেচিং সীমার মধ্যে থাকে।
List<Account> accounts = [SELECT Id, Name FROM Account WHERE Industry = 'Technology'];
Id
এবং Name
ফিল্ড এবং নির্দিষ্ট Industry
ভিত্তিক রেকর্ড ফেচ করা হয়েছে।Bulk SOQL এবং DML অপারেশন পরিচালনার জন্য Collections যেমন List, Set, এবং Map ব্যবহার করুন। এগুলো ডুপ্লিকেট রেকর্ড ম্যানেজ করতে এবং পারফরম্যান্স উন্নত করতে সহায়ক।
Set<Id> accountIds = new Set<Id>();
for (Contact con : contacts) {
accountIds.add(con.AccountId);
}
List<Account> accounts = [SELECT Id, Name FROM Account WHERE Id IN :accountIds];
Set
ব্যবহার করে ডুপ্লিকেট Account Id অপসারণ করে একত্রে SOQL কুয়েরি করা হয়েছে।SOQL বা DML স্টেটমেন্ট লুপের ভিতরে ব্যবহার না করা উচিত। লুপের ভিতরে SOQL বা DML স্টেটমেন্ট ব্যবহার করলে Governor Limits দ্রুত পূরণ হতে পারে।
for (Account acc : accounts) {
acc.Name = 'Updated Name';
update acc; // DML inside loop - Not recommended
}
List<Account> updateAccounts = new List<Account>();
for (Account acc : accounts) {
acc.Name = 'Updated Name';
updateAccounts.add(acc);
}
update updateAccounts; // Bulk DML outside loop
বড় ডেটাসেট প্রসেসিং বা দীর্ঘমেয়াদি কাজের জন্য @future এবং Queueable Apex ব্যবহার করুন। এটি Governor Limits লঙ্ঘন না করেই আলাদা ট্রানজ্যাকশনে কাজ চালিয়ে যেতে সাহায্য করে।
@future
public static void processLargeData(List<Id> recordIds) {
List<Account> accounts = [SELECT Id, Name FROM Account WHERE Id IN :recordIds];
for (Account acc : accounts) {
acc.Industry = 'Updated Industry';
}
update accounts;
}
SOQL কুয়েরি ব্যবহার না করে Custom Settings বা Custom Metadata থেকে ডেটা সংগ্রহ করা যায়। এতে করে SOQL কুয়েরির সংখ্যা কমে এবং Governor Limits বজায় থাকে।
Integer maxLimit = CustomSetting__c.getInstance().Max_Limit__c;
Frequently used ডেটা ক্যাশে করে রাখা Governor Limits বাঁচাতে সহায়ক, কারণ এতে ডেটা পুনরায় কুয়েরি না করেই ক্যাশ থেকে ফেচ করা যায়। Caching করার মাধ্যমে বারবার SOQL কুয়েরি না করে কোড কার্যকরী হয়।
Batch Apex ব্যবহার করে বড় ডেটাসেট ছোট ছোট ব্যাচে ভাগ করে প্রক্রিয়াকরণ করা যায়। এটি গভর্নর লিমিট বজায় রেখে বড় ডেটাসেট প্রক্রিয়া করতে সহায়ক।
public class AccountBatchJob implements Database.Batchable<SObject> {
public Database.QueryLocator start(Database.BatchableContext bc) {
return Database.getQueryLocator('SELECT Id, Name FROM Account');
}
public void execute(Database.BatchableContext bc, List<SObject> scope) {
List<Account> accounts = (List<Account>) scope;
for (Account acc : accounts) {
acc.Name = 'Batch Updated';
}
update accounts;
}
public void finish(Database.BatchableContext bc) {
System.debug('Batch Process Completed');
}
}
Exception হ্যান্ডলিংয়ের মাধ্যমে কোডের স্থায়িত্ব বৃদ্ধি করা যায়। Try-Catch ব্লক ব্যবহার করে ত্রুটি হ্যান্ডলিং করলে অ্যাপ্লিকেশন সঠিকভাবে কাজ করতে পারে এবং গভর্নর লিমিটের সীমার মধ্যে থাকে।
কোডে নির্দিষ্ট সংখ্যা বা মান হার্ড-কোড না করে কনফিগারেবল সেটিংস ব্যবহার করা উচিত। এতে কোড আরও স্থায়ী এবং সীমাবদ্ধতার সাথে সামঞ্জস্যপূর্ণ হয়।
Governor Limit Optimization Techniques মেনে কোডিং করলে Apex কোড গভর্নর লিমিটের মধ্যে থেকে কার্যকরীভাবে কাজ করতে পারে। কিছু গুরুত্বপূর্ণ টেকনিক নিচে সারসংক্ষেপ করা হলো:
এ সকল স্ট্র্যাটেজি অনুসরণ করে Salesforce প্ল্যাটফর্মে Governor Limits বজায় রেখে কোডিং করা সম্ভব, যা অ্যাপ্লিকেশনকে স্থায়ী ও কার্যকরী করে।
common.read_more